class Solution {
public:
/*
  // 哈希法
    vector<int> singleNumber(vector<int>& nums) {
        unordered_map<int, int> hash;
        for(int i : nums){
            hash[i] += 1;
        }
        vector<int> res;
        for(int i : nums){
            if(hash[i] == 1){
                res.push_back(i);
            }
        }
        return res;
    }
*/ 
  
   // 位运算 
    vector<int> singleNumber(vector<int>& nums) {
       int x = 0;
        for(int& i : nums){
            x ^= i;
        }
        long long mask = (-(long long)x) & x;  // （用例超过int）

        vector<int> res{0, 0};
        for(int& i : nums){   // 分别异或出每组中只出现一次的数
            if(0 == (i & mask))
                res[0] ^= i;
            else 
                res[1] ^= i;
        }
        return res;
    }
};